package cn.com.bluemoon.daps.sync.core.sync.sql.mysql.datatype;

import cn.com.bluemoon.daps.sync.core.sync.sql.IConstants;

import java.util.Collections;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public interface DataType extends IConstants {
    public static final Pattern match_func = Pattern.compile("\\(.*\\)");

    /**
     * 判断是否为函数默认值
     *
     * @param str 默认值
     * @return t 是 f否
     */
    default boolean isFunction(String str) {
        Matcher matcher = match_func.matcher(str);
        return matcher.matches();
    }

    /**
     * 默认值处理
     * 是否加单引号 等
     * 默认逻辑为不错任何处理
     *
     * @param defaultValue source
     * @return target
     */
    default Object cast(Object defaultValue) {
        return defaultValue;
    }

    /**
     * 包装前后
     *
     * @param defaultValue 默认值
     * @param wrapprStr    字符
     * @return 结果
     */
    default Object wrapper(Object defaultValue, String wrapprStr) {
        if (defaultValue == null) return null;
        return wrapprStr + defaultValue + wrapprStr;
    }

    /**
     * 包装前后
     *
     * @param defaultValue 默认值
     * @param pre          前字符
     * @param post         后字符
     * @return 结果
     */
    default Object wrapper(Object defaultValue, String pre, String post) {
        if (defaultValue == null) return null;
        return pre + defaultValue + post;
    }

    default Set<String> name(boolean upperCase) {
        Set<String> name = name();
        if (name == null) {
            return Collections.emptySet();
        }
        return name.stream().map(n -> upperCase ? n.toUpperCase() : n).collect(Collectors.toSet());
    }

    /**
     * @return 名称
     */
    default Set<String> name() {
        return Collections.emptySet();
    }

    /**
     * 格式化小数位
     */
    default Integer normalizeScale(String dataType, Integer decimalLength) {
        return decimalLength;
    }
}
